package thread.homework;

/**
 * 有效的缩小同步范围可以在保证并发安全的前提下提高并发效率
 */
public class SyncDEmo2 {
    public static void main(String[] args) {
        /**
         * 两家店同时试衣服,一家店先后试衣服
         * */
        Shop shop=new Shop();
//        Shop shop1=new Shop();
//        Shop shop2=new Shop();
        new Thread("蔡徐坤"){
            public void run(){
//                shop1.buy();
                shop.buy();
            }
        }.start();
        new Thread("乔碧萝"){
            public void run(){
//                shop2.buy();
                shop.buy();
            }
        }.start();

    }
}
class Shop {
    //在方法上使用synchronized,那么同步的监视器对象不可选，就是this
    public void buy() {
        try {
            Thread t = Thread.currentThread();
            System.out.println(t + "正在挑衣服");
            Thread.sleep(3000);
            //同步块可以更加灵活的控制需要同步执行的代码
            //但是同步块需要自行指定同步监视器对象
            //同步监视器对象通常使用临界资源（抢谁就锁谁）
            synchronized (this) {//(类名.class)
                System.out.println(t + "正在试衣服");
                Thread.sleep(3000);
            }
            System.out.println(t + "结账离开");
        } catch (InterruptedException e) {
            e.printStackTrace();

        }
    }
}